﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace sqlsearcher.Models
{
    public class AppRegCost
    {
        /// <summary>
        /// 正整数
        /// </summary>
        public static string ZZSReg = @"^[0-9]*$";
        public static string Not0 = @"^[1-9]*$";
        public static string TwoNum = @"^[0-9]+(.[0-9]{2})?$";
        public static string CN = @"^[\u4e00-\u9fa5]{0,}$";
        public static string ENNum = @"^[A-Za-z0-9]{4,40}$";
        public static string Email = @"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$";
        public static string RegDomain = @"^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$";
        public static string RegInter = @"^(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*([\?&]\w+=\w*)*$";
        public static string RegMobilePhone = @"/^1[3456789]\d{9}$/";
        public static string RegPhone = @"/^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/";
        public static string IDCard = @"/^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/";
        public static string RegPwd = @"^(?=.*\d)(?=.*[a - z])(?=.*[A - Z]).{8,10}$";
        public static string RegDate = @"^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$";
        public static string RegQQ = @"[1-9][0-9]{4,10}";
        public static string RegEmailCode = @"/^[1-9][0-9]{5}$/";
        public static string RegIP = @"((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))";

        public static string RegLayui = @"【html部分】
<input type='text' name='UserID' lay-verify='required|englishStr' autocomplete='off' placeholder='请输入用户账号' class='layui-input'>
【js部分】
        var verify = {
            title: function (value) {   //  自定义验证
                if (value.length < 5) {
                    return '标题至少得5个字符啊';
                }
            },
            englishStr: [/^[a-z|A-Z]{5,18}$/, '必须是5到18位的英文字母组成'],   //  正则验证和验证失败消息
            chineseStr: [/^[a-zA-Z\u4e00-\u9fa5]{2,15}$/, '只能是2到15位的中文或者英文组成'],
            pass: [/^[\S]{6,12}$/, '密码必须6到12位，且不能出现空格'],
            content: function (value) {
                layui.layedit.sync(editIndex);
            }
        };

        form.verify(layPage.verify);";
        public static string RegNet = @"Regex.Match(string input, string pattern)
Regex.Match(string input, string pattern, RegexOptions options);
【字符串替换】
string line = 'ADDR=1234;NAME=ZHANG;PHONE=6789';
Regex reg = new Regex('NAME=(.+);')
string modified = reg.Replace(line, 'NAME=WANG;');";
    
        public static string RegJS = @"var reg = new RegExp('\\d{8-20}')
reg.test(“11111111a”)";

        public static string Reg = @"";

        #region + 所有
        public static string AllReg = @"一、校验数字的表达式
【数字】
^[0-9]*$

【n位的数字】
^\d{n}$

【至少n位的数字】
^\d{n,}$

【m-n位的数字】
^\d{m,n}$

【零和非零开头的数字】
^(0|[1-9][0-9]*)$

【非零开头的最多带两位小数的数字】
^([1-9][0-9]*)+(.[0-9]{1,2})?$

【带1-2位小数的正数或负数】
^(\-)?\d+(\.\d{1,2})?$

【正数、负数、和小数】
^(\-|\+)?\d+(\.\d+)?$

【有两位小数的正实数】
^[0-9]+(.[0-9]{2})?$

【有1~3位小数的正实数】
^[0-9]+(.[0-9]{1,3})?$

【非零的正整数】
^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$

【非零的负整数】
^\-[1-9][]0-9*$ 或 ^-[1-9]\d*$

【非负整数】
^\d+$ 或 ^[1-9]\d*|0$

【非正整数】
^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$

【非负浮点数】
^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1 - 9]\d*|0?\.0+|0$

【非正浮点数】
^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1 - 9]\d*\.\d*|0\.\d*[1 - 9]\d*))|0?\.0+|0$

【正浮点数】
^[1-9]\d*\.\d*|0\.\d*[1 - 9]\d*$ 或 ^(([0 - 9]+\.[0-9]*[1 - 9][0 - 9]*)|([0 - 9]*[1 - 9][0 - 9]*\.[0-9]+)|([0 - 9]*[1 - 9][0 - 9]*))$

【负浮点数】
^-([1 - 9]\d*\.\d*|0\.\d*[1 - 9]\d*)$ 或 ^(-(([0 - 9]+\.[0-9]*[1 - 9][0 - 9]*)|([0 - 9]*[1 - 9][0 - 9]*\.[0-9]+)|([0 - 9]*[1 - 9][0 - 9]*)))$

【浮点数】
^(-?\d+)(\.\d+)?$ 或 ^-?([1 - 9]\d*\.\d*|0\.\d*[1 - 9]\d*|0?\.0+|0)$

二、校验字符的表达式
【汉字】
^[\u4e00-\u9fa5]{0,}$

【英文和数字】
^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$

【长度为3-20的所有字符】
^.{3,20}$

【由26个英文字母组成的字符串】
^[A-Za-z]+$

【由26个大写英文字母组成的字符串】
^[A-Z]+$

【由26个小写英文字母组成的字符串】
^[a-z]+$

【由数字和26个英文字母组成的字符串】
^[A-Za-z0-9]+$

【由数字、26个英文字母或者下划线组成的字符串】
^\w+$ 或 ^\w{3,20}$

【中文、英文、数字包括下划线】
^[\u4E00-\u9FA5A-Za-z0-9_]+$

【中文、英文、数字但不包括下划线等符号】
^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$

【可以输入含有^%&',;=?$\等字符：[^%&',;=?$\x22]+ 12 禁止输入含有~的字符：[^~\x22]+
            
三、特殊需求表达式
【Email地址】
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

【域名】
[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

【InternetURL】
[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

【手机号码】
^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

【电话号码】
^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$

【国内电话号码】
\d{3}-\d{8}|\d{4}-\d{7}

【身份证号(15位、18位数字)】
^\d{15}|\d{18}$

【短身份证号码(数字、字母x结尾)】
^([0 - 9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$

【帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)】
^[a-zA-Z] [a-zA-Z0-9_]{4,15}$

【密码(以字母开头，长度在6~18之间，只能包含字母、数字和下划线)】
^[a-zA-Z]\w{5,17}$

【强密码(必须包含大小写字母和数字的组合，不能使用特殊字符，长度在8-10之间)】
^(?=.*\d)(?=.*[a - z])(?=.*[A - Z]).{8,10}$

【日期格式】
^\d{4}-\d{1,2}-\d{1,2}

【一年的12个月(01～09和1～12)】
^(0?[1 - 9]|1[0-2])$

【一个月的31天(01～09和1～31)】
^((0?[1 - 9])|((1|2)[0-9])|30|31)$"; 
        #endregion
    }
}
